查看原文
其他

解读 Flutter 全平台开发的误解与偏见

The following article is from GSYTech Author 恋猫de小郭

Flutter 2.0 发布之后,Web 版本进入了 stable 分支,Desktop 版本也可以在 stable 分支通过 snapshot beta 镜像开始预览使用,导致最近关于 “Flutter 制霸全平台” 之类的话题又被炒作起来,所以本篇主要对这个话题做一次解答。

1、Flutter 制霸全平台

谷歌官方在 Flutter 2.0 的发布上说过:“每个应用程序都可以通过 Flutter 2 进行免升级,因为它们现在可以在不重写的情况下扩展到 Desktop 和 Web ” 。

事实上 Flutter 在 Android 和 iOS 平台上的兼容和适配确实很不错,但是对于 Web 和 Desktop 目前来说显然不是如此,“不重写下扩展”这话估计谷歌自己都不信。

首先 “不重写的情况下扩展到 Desktop 和 Web” 就很不现实 ,为什么呢我们后面分析,这里先说下 Flutter 的核心设计,了解过 Flutter 实现原理的应该知道, Flutter 的核心设计是 :

平台只需要提供 Sufrace ,然后剩余的控件和渲染逻辑都由 Engine 来完成,而 Engine 直接于 GPU 交互,控件也和所在平台没有关系,所以 Flutter 可以有不错的性能和跨平台能力。

1.1、 Web

但是 Flutter 在 Web 上却并非完全如前面所述那样,因为 Web 下的浏览器 JS/CSS/HTML 霸权是不可撼动的,所以 Flutter 一开始在 Web 上会通过 HtmlCanvas 来转化为浏览器的原生标签。

这有什么问题?这就表示 Flutter 需要和 “Web 原生有不同程度的耦合关系”,从而造成了代码在不同平台的表现形式和 API 的兼容能力都会有所不同,而 Flutter 应对 Web 的这种情况,使用了大量的自定义标签,从而导致在大小、性能和体验上都还不是很好。

当然 Flutter 还提供了另外一种 Web 渲染能力,更接近 Mobile 和 Desktop 的 CanvasKit 渲染模式,CanvasKit 相当于是基于 WebGL 版本的 Skia 渲染,这种模式下性能肯定会更好,但是需要做的兼容和适配工作量也更大。

flutter web 编译是可以通过 --web-renderer 指定渲染模式,现在模式是 auto 模式,也就是在手机浏览器使用 HTML renderer, 在 PC 浏览器使用 CanvasKit renderer。

当然说那么多我的意思并不是为了贬低 Web ,这里只是想表达 Flutter Web 并不是也不能干掉前端开发,更不足以挑战 React、Vue 的地位,它更多的是 Flutter 的一种能力拓展:

Flutter 开发者恰好写了一个 App 或者 Desktop 的页面,那么顺手把它打包成 Web 用起来,虽然体验不好但是又不是不能用的场景。

所以至少短时间内 Flutter Web 在前端领域就是“弟弟”,别说制霸了,能猥琐发育就很难得了。

1.2、Desktop

在 PC 领域 Flutter 表现还是可以的,因为它和手机端具备类似的渲染逻辑,而对于 PC 端 Flutter 主要的考验还是控件体验和插件支持的问题上。

因为不同于手机,桌面端大部分时候界面布局和手机端本身就存在较大差异,甚至桌面端的界面通常是可大小调节,另外桌面端应用的输入和控件焦点主要来源于鼠标,所以回归到最前面的那段话“不重写的情况下扩展到 Desktop 和 Web” 就很不现实。

那么有没有办法让界面同时适配 PC 和 Mobile 呢?还真有,比如 ResponsiveFramework 就是用于实现这种需求的,当然这种实现需要消耗性能和时间成本。

另外 PC 和 Mobile 还是存在一些通用的场景,比如实现类型 2B 产品的像飞书系列的应用,在关于小程序的功能和那个,可以做到同一套逻辑在手机和 PC 端更有效率的同步发布,同时还可能拥有不错的性能。

最后 Flutter 对于 ReorderableListViewTextFieldTextFormField 等控件上也在 2.0 开始增加了增对桌面端的体验,不过还是那句话,Flutter 在 PC 领域的路才刚刚开始,制霸是不可能制霸的,不过在 PC 端的未来确实会比 Web 更明朗。

  • Electron 打包方案的主要贡献者,创建了 squirrel-flutter
  • Ubuntu 的 installer 使用了用 Flutter
  • 微软正在继续扩大对 Flutter 的支持 《Announcing Flutter support for foldable devices》

经历过多端开发的才明白一套代码在多端上通用的成本有多高,跨平台能够在 Android 和 iOS 上高性能低耦合的实现已经很难得了,如果想无缝拓展到 Web 和 Desktop 只会自己挖坑埋自己,所以部分逻辑全平台,实际项目分平台我觉得才是 Flutter 多平台的未来

- EOF -

推荐阅读  点击标题可跳转

1、安利篇:Kotlin高阶函数与特性,让代码飞起

2、7 个你应该知道的Gradle 实用技巧

3、我们饭碗保住了!谷歌胜,甲骨文败



看完本文有收获?请分享给更多人

 推荐关注「安卓开发精选」,提升安卓开发技术

点赞和在看就是最大的支持❤️

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存